package com.javabase.study.OOPFistPart;

/**
 * TODO
 * 内容：测试封装
 * 作者:jxx
 * 创建时间：2021/6/16
 */
public class TestEncapsulation {

    public static void main(String[] args){

        PersonEnca person = new PersonEnca();
        //person.name = "jiangxx"; 报错 编译错误
        // person.age = 18; 报错 编译错误
        person.setName("jiangxx");
        person.setAge(23);
        person.setSex(true);

        System.out.println(person);

        PersonEnca person2 = new PersonEnca("gaoyang",25,false);
        System.out.println(person2.getName());
        System.out.println(person2.getAge());
        System.out.println(person2.isSex());
        System.out.println(person2);

    }
}

class PersonEnca{
    private String name;
    private int age;
    private boolean sex;

    // 无参构造方法
    public PersonEnca(){

    }
    // 有参构造方法
    public PersonEnca(String name,int age,boolean sex){
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    // 由于 当前类的属性的访问控制符都是private，其他类都无法直接访问属性
    // 只能通过set/get方法来 设置和访问对象属性和方法
    // 并且当属性值有其他要求时，可以在set/get方法中进行处理
    //boolean 类型属性的 get方法名以is开头，后面跟属性名称
    public void setName(String name){
        this.name = name;
    }
    // 人的年龄不超过120岁，且不为负数
    // 如果不是正常值则需要设定为默认值18
    public void setAge(int age){

        if(age > 120 || age < 0){
            this.age = 18;
        }
        this.age = age;

    }
    public void setSex(boolean sex){
        this.sex = sex;
    }
    public String getName(){
        return name;
    }
    public int getAge(){
        return age;
    }
    public boolean isSex(){
        return sex;
    }

    @Override
    public String toString() {
        return "Person name: [" +  this.name + ",age " + this.age + ",sex " + this.sex + "]";
    }
}
